package com.sixth.system.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sixth.core.annotation.OperaLog;
import com.sixth.core.entity.News;
import com.sixth.core.util.OSSUtil;
import com.sixth.core.vo.R;
import com.sixth.system.service.NewsService;
import com.sixth.system.vo.NewsVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 新闻管理控制器
 *
 * @author Stu YH
 * @date Created in 2024/8/21 9:34
 * @description 提供新闻管理相关的API接口
 * @modified By：
 * @version:
 */
@Api(tags = "新闻管理")
@RestController
@RequestMapping("/system/news")
public class NewsController {
    @Autowired
    private NewsService newsService;

    /**
     * 分页查询所有新闻
     * @param newsVo 查询条件
     * @return 分页查询结果
     */
    @ApiOperation(value = "分页查询所有新闻", notes = "根据查询条件分页查询新闻列表")
    @PostMapping("/listByPage")
    public R<Page<News>> listByPage(@RequestBody NewsVo newsVo) {
        return newsService.listByPage(newsVo);
    }

    /**
     * 查询所有新闻
     * @return 所有新闻列表
     */
    @ApiOperation(value = "查询所有新闻", notes = "获取所有新闻信息")
    @GetMapping("/listAllNews")
    public R<List<News>> listAllNews() {
        return newsService.listAllNews();
    }

    /**
     * 新增或修改新闻
     * @param news 新闻信息
     * @return 操作结果
     */
    @ApiOperation(value = "新增或修改新闻", notes = "添加或修改新闻信息")
    @OperaLog(value = "添加或修改新闻", type = 2)
    @PostMapping("/addUpdate")
    public boolean addUpdate(@RequestBody News news) {
        return newsService.addUpdate(news);
    }

    /**
     * 删除单条新闻
     * @param newsId 新闻ID
     * @return 删除结果
     */
    @ApiOperation(value = "删除单条新闻", notes = "根据新闻ID删除新闻")
    @OperaLog(value = "删除新闻", type = 3)
    @GetMapping("/delete/{newsId}")
    public R delete(@PathVariable Long newsId) {
        return newsService.delete(newsId);
    }

    /**
     * 上传图片
     * @param file 图片文件
     * @return 上传结果
     */
    @ApiOperation(value = "上传图片", notes = "上传图片到OSS并返回URL")
    @PostMapping("/uploadOos")
    public R upload(@RequestParam("file") MultipartFile file) {
        String url = OSSUtil.uploadOss(file);
        return R.ok(url);
    }
    @GetMapping("/getNewsByNewsId/{newsId}")
    public R<News> getNewsByNewsId(@PathVariable Long newsId){
        return newsService.getNewsByNewsId(newsId);
    }
}
